package com.hrbxlh.dao;

import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
public interface VirtualMachineManageDao {

	/**
	 * @description 查询虚拟机ID的列表
	 * @return
	 */
	List<Map<String,String>> getVmIdList();

	/**
	 * @description 更新虚拟机
	 * @param paramMap
	 * @return
	 */
	int updateVirtualMachine(Map<String, Object> paramMap);

	/**
	 * @description 添加虚拟机
	 * @param paramMap
	 * @return
	 */
	int addVirtualMachine(Map<String, Object> paramMap);

	/**
	 * @description 删除虚拟机
	 * @param vmId
	 * @return
	 */
	int deleteVirtualMachine(String vmId);

	/**
	 * @description 查询虚拟机模板ID的列表
	 * @return
	 */
	List<Map<String,String>> getFlavorIdList();

	/**
	 * @description 更新虚拟机模板
	 * @param paramMap
	 * @return
	 */
	int updateFlavor(Map<String, Object> paramMap);

	/**
	 * @description 添加虚拟机模板
	 * @param paramMap
	 * @return
	 */
	int addFlavor(Map<String, Object> paramMap);

	/**
	 * @description 删除虚拟机模板
	 * @param flavorId
	 * @return
	 */
	int deleteFlavor(String flavorId);

	/**
	 * @description 条件查询虚拟机数量
	 * @param paramMap
	 * @return
	 */
	int getVirtualMachineNum(Map<String, Object> paramMap);

	/**
	 * @description 查询学院列表
	 */
	List<Map<String,Object>> getDepartmentList();

	/**
	 * @description 条件及分页查询虚拟机列表
	 * @param paramMap
	 * @return
	 */
	List<Map<String,Object>> getVirtualMachineList(Map<String, Object> paramMap);

	/**
	 * @description 条件查询教师列表
	 * @param paramMap
	 * @return
	 */
	List<Map<String,Object>> getTeacherList(Map<String, Object> paramMap);

	/**
	 * @description 查询虚拟机模板列表
	 * @return
	 */
	List<Map<String,Object>> getFlavorList();

	/**
	 * @description 检查教师是否已分配虚拟机
	 * @param stuorteaId
	 * @return
	 */
	int checkAllocated(String stuorteaId);

	/**
	 * @description 检查班级是否已分配虚拟机
	 * @param paramMap classId
	 * @return
	 */
	int checkClassAllocated(Map<String, Object> paramMap);

	/**
	 * @description 根据虚拟机模板查询未分配的虚拟机列表
	 * @param paramMap
	 * @return
	 */
	List<Map<String,Object>> getVirtualMachineUnAllocatedListByFlavor(Map<String, Object> paramMap);

	/**
	 * @description 分配虚拟机，更改虚拟机的状态、使用者ID、主机/从机
	 * @param paramMap
	 * @return
	 */
	int allocateVirtualMachine(Map<String, Object> paramMap);

	/**
	 * @description 解除虚拟机分配，更改虚拟机的状态，使用者ID、主机/从机置空
	 * @param paramMap
	 */
	void unallocateVirtualMachine(Map<String, Object> paramMap);

	/**
	 * @description 增加教师虚拟机集群配置信息
	 * @param paramMap
	 */
	void addVirtualMachineTeacher(Map<String, Object> paramMap);

	/**
	 * @description 删除教师虚拟机集群配置信息
	 * @param paramMap
	 */
	void deleteVirtualMachineTeacher(Map<String, Object> paramMap);

	/**
	 * @description 根据用户ID查询分配给他的虚拟机列表
	 * @param paramMap
	 * @return
	 */
	List<Map<String,Object>> getVirtualMachineByStuorteaId(Map<String, Object> paramMap);

	/**
	 * @description 条件查询班级列表
	 * @param paramMap
	 * @return
	 */
	List<Map<String,Object>> getClassList(Map<String, Object> paramMap);

	/**
	 * @description 根据班级获取该班学生人数
	 * @param classId
	 * @return
	 */
	int getStuNumByClassId(int classId);

	/**
	 * @description 根据班级查询未分配虚拟机的学生列表
	 * @param paramMap
	 * @return
	 */
	List<Map<String,Object>> getStuUnallocatedList(Map<String, Object> paramMap);

	/**
	 * @description 添加班级虚拟机集群配置信息
	 * @param paramMap
	 */
	void addVirtualMachineClass(Map<String, Object> paramMap);

	/**
	 * @description 解除某班级下所有学生的虚拟机绑定
	 * @param paramMap
	 */
	void unallocateVirtualMachineByClass(Map<String, Object> paramMap);

	/**
	 * @description 删除班级虚拟机集群配置信息
	 * @param paramMap
	 */
	void deleteVirtualMachineClass(Map<String, Object> paramMap);

	/**
	 * @description 分页查询某班级下的学生列表
	 * @param paramMap
	 * @return
	 */
	List<Map<String, Object>> getStuListByClass(Map<String, Object> paramMap);

	/**
	 * @description 检查用户和虚拟机是否绑定
	 * @param paramMap
	 * @return
	 */
	int checkVirtualMachine(Map<String, Object> paramMap);

	/**
	 * @description 查询班级基本信息
	 * @param paramMap
	 * @return
	 */
    Map<String,Object> getClassDetail(Map<String, Object> paramMap);

	/**
	 * @description 查询教师基本信息
	 * @param paramMap
	 * @return
	 */
	Map<String,Object> getTeacherDetail(Map<String, Object> paramMap);

	/**
	 * @description 标记虚拟机为故障
	 * @param paramMap
	 */
	void markBrokenVirtualMachine(Map<String, Object> paramMap);

	/**
	 * @description 查询某教师某课程下的学生列表
	 * @param paramMap
	 * @return
	 */
	List<Map<String, Object>> getStuListByCourseTeacher(Map<String, Object> paramMap);

	/**
	 * @description 查询某用户姓名
	 * @param stuorteaId
	 * @return
	 */
	String getUserName(String stuorteaId);
}
